﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;

using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace INSAForManagers
{
    public partial class FormManagerInfo : Form

    {

        //txtOrganName 컨트롤을 다른 폼에서 컨트롤 하기 위한 전역 변수
        private static TextBox txtStaticOrganName = null;

        private FormMain parent;

        public FormManagerInfo(FormMain p)
        {
            InitializeComponent();
            
            //메인 폼 객체 참조 변수
            parent = p;

            //소속기관 전역변수에 설정
            txtStaticOrganName = this.txtOrganName;

            
            //사용자정보가 이미 입력되어 있을 경우에는
            if (Config.State == Config.STATE_OK)
            {

                //비밀번호 변경 버튼을 활성화
                btnPWModify.Enabled = true;

                //control 세팅 <- mvi 객체
                setControlFromMVI();

            }
            else {

                btnPWModify.Enabled = false;
            
            }
        }

        /*******************************
         * 이벤트 메서드 모음
         *******************************/

        //닫기 버튼 클릭
        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
            FormMain.setManagerInfoEnabled();
        }

        //찾기 버튼 클릭
        private void btnSearch_Click(object sender, EventArgs e)
        {
            Form f = new FormOrganInfo();            
            f.ShowDialog(this);
        }

                
        //저장 버튼 클릭
        private void btnSave_Click(object sender, EventArgs e)
        {
            bool bChk = false;//쿼리작업결과상태변수

            
            if (checkInputValue() == true)
            {
                
                //mvi객체에 값을 설정
                setMVIFromInput();


                if (Config.State == Config.STATE_OK)     //기존 데이터가 있을 경우
                {
                    //비밀번호 검사 해야 함
                    if (DBUtil.checkPassword(Config.Mvi.Inx, txtPasswd.Text) == false)
                    {
                        MessageBox.Show("비밀번호가 옳바르지 않습니다.   ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtPasswd.Text = "";
                        txtPasswd.Focus();
                        return;
                    }

                    //업데이트
                    bChk = updateData();

                    //dgvInfo 갱신
                    parent.stateRefresh();

                    Config.setMvi();

                    MessageBox.Show("데이터가 정상적으로 저장되었습니다.   ", "확인");

                    FormMain.MnuSManagerInfo.Enabled = true;

                    this.Close();
                }
                else
                {
                    bChk = insertData();//새로 삽입                    

                    //환경설정 값 수정
                    Config.State = Config.STATE_OK;

                    //메인 폼 메뉴 활성화
                    FormMain.setMenuEnabled();
                    FormMain.setManagerInfoEnabled();

                    MessageBox.Show("데이터가 정상적으로 저장되었습니다.   \n\n처음 사용자의 경우 프로그램을 종료 후 다시 실행시켜주세요.    ", "확인");

                    parent.Close();
                }

               
            }

           
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Form f = new HFormPNo();
            f.Show(this);
        }

        private void btnPWModify_Click(object sender, EventArgs e)
        {
            Form f = new FormPW();
            f.ShowDialog(this);
        }

        /*************************
         * 메서드 모음
         *************************/

        //입력 유무/유효성 검사
        private bool checkInputValue()
        {
            if (txtEvaluer1.Text.Length == 0)
            {
                MessageBox.Show("평정자 성명을 입력하십시오.   ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtEvaluer1.Focus();
                return false;
            }

            if (txtConfirmer.Text.Length == 0)
            {
                MessageBox.Show("확인자 성명을 입력하십시오.   ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtConfirmer.Focus();
                return false;
            }

            if (txtOrganName.Text.Length == 0)
            {
                MessageBox.Show("소속기관을 선택하세요.   ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtOrganName.Focus();
                return false;
            }

            if (txtPasswd.Text.Length < 4)
            {
                MessageBox.Show("비밀번호(4글자 이상)를 입력하세요.   ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtPasswd.Focus();
                return false;
            }

            if (Config.State == Config.STATE_INIT)      //처음 입력할 때만 검사함
            {
                if (txtPasswdChk.Text.Length == 0)
                {
                    MessageBox.Show("비밀번호 확인을 입력하세요.   ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtPasswdChk.Focus();
                    return false;
                }

                if (txtPasswd.Text != txtPasswdChk.Text)
                {
                    MessageBox.Show("입력 하신 비밀번호가 일치하지 않습니다.   ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtPasswd.Text = "";
                    txtPasswdChk.Text = "";
                    txtPasswd.Focus();
                    return false;
                }

            }
            return true;
            
        }
   
        //DB에 레코드 삽입
        private bool insertData()
        {
            if (DBUtil.insertValuerInfo(Config.Mvi))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        //DB의 레코드 수정
        private bool updateData()
        {
            if (DBUtil.updateValuerInfo(Config.Mvi))
            {
                return true;
            }else{
                return false;
            }
        }

        //입력한 데이터를 ModelValuerInfo 에 설정
        private void setMVIFromInput()
        {
            //평정자1
            Config.Mvi.Evaluer1 = txtEvaluer1.Text.Trim();
            //평정자2
            Config.Mvi.Evaluer2 = txtEvaluer2.Text.Trim();
            //확인자
            Config.Mvi.Confirmer = txtConfirmer.Text.Trim();
            //기관
            Config.Mvi.Organ = DBUtil.getOrganCode(txtOrganName.Text);
            //비밀번호
            Config.Mvi.Passwd = txtPasswd.Text;
            //시작일자
            Config.Mvi.SDate = dateStart.Value;
            //종료일자
            Config.Mvi.EDate = dateEnd.Value;

            DateTime now = DateTime.Now;
            Config.Mvi.Regtime = now;

        }

        //ModelValuerInfo 객체에서 컨트롤의 값을 설정
        private void setControlFromMVI()
        {
            //평정자1
            txtEvaluer1.Text = Config.Mvi.Evaluer1;
            //평정자2
            txtEvaluer2.Text = Config.Mvi.Evaluer2;
            //확인자
            txtConfirmer.Text = Config.Mvi.Confirmer;
            //소속
            txtOrganName.Text = DBUtil.getOrganName(Config.Mvi.Organ);            
            //비밀번호
            txtPasswd.Text = Config.Mvi.Passwd;
            //시작일자
            dateStart.Value = Config.Mvi.SDate;
            //종료일자
            dateEnd.Value = Config.Mvi.EDate;

        }

        //다른 폼에서 소속 기관 텍스트 박스에 값을 설정
        public static void setOrganName(string organ_name)
        {
            txtStaticOrganName.Text = organ_name;
        }

        private void txt_TextChanged(object sender, EventArgs e)
        {

        }

        private void FormManagerInfo_Load(object sender, EventArgs e)
        {

        }
              
    }
}
